"""
SimpleAPI ORM 快速入门

这是一个最简单的示例，展示如何在 5 分钟内上手 SimpleAPI ORM。
用户完全感知不到 Tortoise ORM 的存在！
"""

import asyncio

# 只需要导入这些，无需了解 Tortoise ORM
from simpleapi.orm import (
    BaseModel,           # 基础模型类
    CharField,           # 字符串字段
    IntField,           # 整数字段
    BooleanField,       # 布尔字段
    database,           # 数据库连接对象
    DatabaseConfig      # 数据库配置工具
)


# 1. 定义模型 - 就像定义普通的 Python 类
class User(BaseModel):  # BaseModel 自动包含 id, created_at, updated_at
    """用户模型"""
    username = CharField(max_length=50, unique=True)
    email = CharField(max_length=100)
    age = IntField(null=True)
    is_active = BooleanField(default=True)
    
    class Meta:
        table = "users"  # 数据库表名


async def main():
    """主函数 - 演示基础用法"""
    print("🚀 SimpleAPI ORM 快速入门")
    print("=" * 40)
    
    try:
        # 2. 连接数据库 - 一行代码搞定
        await database.connect(
            url=DatabaseConfig.sqlite("quickstart.db"),  # SQLite 数据库
            generate_schemas=True  # 自动创建表
        )
        print("✅ 数据库连接成功")
        
        # 清空测试数据
        await User.truncate_table()
        
        # 3. 创建数据 - 简单直观
        user = await User.create_record(
            username="alice",
            email="alice@example.com",
            age=25
        )
        print(f"✅ 创建用户: {user}")
        
        # 4. 查询数据 - 多种方式
        # 方式1: 直接查询
        found_user = await User.get_record(username="alice")
        print(f"✅ 查询用户: {found_user}")
        
        # 方式2: 列表查询
        all_users = await User.list_records(is_active=True)
        print(f"✅ 活跃用户: {len(all_users)} 个")
        
        # 方式3: 查询构建器（高级查询）
        adult_users = await (User.query_builder()
                           .filter(age__gte=18)  # 年龄 >= 18
                           .order_by("-id")  # 按 ID 倒序
                           .limit(10)  # 限制 10 条
                           .all())
        print(f"✅ 成年用户: {len(adult_users)} 个")
        
        # 5. 更新数据
        updated_count = await User.update_records(
            filter_kwargs={"username": "alice"},  # 条件
            age=26  # 新值
        )
        print(f"✅ 更新用户: {updated_count} 条记录")
        
        # 6. 统计数据
        total_users = await User.count_records()
        user_exists = await User.exists_record(username="alice")
        print(f"✅ 统计: 总用户数={total_users}, alice存在={user_exists}")
        
        # 7. 数据序列化
        user_data = user.to_dict()
        print(f"✅ 用户数据: {user_data}")
        
        print("\n🎉 快速入门完成！您已经掌握了 SimpleAPI ORM 的基础用法！")
        
    except Exception as e:
        print(f"❌ 错误: {e}")
    finally:
        # 8. 关闭连接
        await database.disconnect()
        print("✅ 数据库连接已关闭")


if __name__ == "__main__":
    # 运行示例
    asyncio.run(main())
    
    print("\n" + "=" * 50)
    print("🎯 下一步:")
    print("1. 查看 examples/orm_example.py 了解更多功能")
    print("2. 阅读 docs/orm_guide.md 获取详细指南")
    print("3. 开始构建您的应用！")
    print("=" * 50) 